//
//  HMSqliteManager.swift
//  FMDB演练
//
//  Created by apple on 17/4/9.
//  Copyright © 2017年 itheima. All rights reserved.
//

import UIKit
import FMDB

//  数据库的路径
let DBPath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as NSString).appendingPathComponent("Weibo.db")

//  封装FMDB的工具类
//  FMDatabaseQueue: 要使用单利创建这个对象,保证队列只有一个,保证数据库多线程情况访问是安全的
class HMSqliteManager: FMDatabaseQueue {

    //  单例的全局访问点
    static let sharedManager: HMSqliteManager = {
         print(DBPath)
        //  创建数据库并打开或者打开数据库
        let manager = HMSqliteManager(path: DBPath)!
        //  创建表
        manager.createTables()
        return manager
    }()
    
    //  创建表
    fileprivate func createTables() {
        //  获取db.sql的文件路径
        let sqlPath = Bundle.main.path(forResource: "db.sql", ofType: nil)!
        //  根据文件路径获取文件内容
        let sql = try! String(contentsOfFile: sqlPath)
        //  执行sql
        self.inDatabase { (db) in
            //  执行多条sql语句
            let result = db?.executeStatements(sql)
            if result == true {
                print("创表成功")
            } else {
                print("创表失败")
            }
        }
    
    }
    
    //  根据查询的sql语句获取表数据对应的数组字典
    func selectDicArray(sql: String) -> [[String: Any]] {
        
        var tempArray = [[String: Any]]()
        //  执行sql
        self.inDatabase { (db) in
            //  根据外界的sql语句获取结果集
            if let resultSet = db?.executeQuery(sql, withArgumentsIn: nil) {
                //  获取列数,根据遍历列数的索引获取对应列明和列值
                let colCount = resultSet.columnCount()
                //  遍历结果集
                while resultSet.next() {
                    //  有下一条记录
                    var dic = [String: Any]()
                    
                    //  遍历列数
                    for i in 0..<colCount {
                        //  根据列索引获取列名-> 字典的key
                        let key = resultSet.columnName(for: i)!
                        //  根据列的索引获取列值
                        let value = resultSet.object(forColumnIndex: i)!
                        
                        //  给字典添加键值对
                        dic[key] = value
                    }
                    //  添加字典
                    tempArray.append(dic)
                }
                
            }
        }
        return tempArray
    }
    
}
